Solvers are executable code developed for providing solutions to problems represented as mathematical models. Some of the provided solutions may be optimized. Today, there are a number of different types of solvers for solving problems defined by different mathematical models. For example, a first type of solver is well-suited for solving problems defined by a linear model, a second type of solver is well-suited for solving problems defined by a quadratic model, a third type of solver is well-suited for solving problems defined by a mixed integer model, and a fourth type of solver is well-suited for solving constraint satisfaction problems defined by a model.
Linear solvers, such as, for example, simplex solvers, may solve mathematical problems, such as linear programming problems, using a number of different solution approaches. For example, in a first approach, a linear solver may attempt to solve a mathematical problem using a double arithmetic approach, and in a second approach, a linear solver may attempt to solve a mathematical problem using an exact arithmetic approach.
The double arithmetic approach may be computationally more efficient, but less accurate than the fine-grained approach. As a result, a linear solver using the double arithmetic approach may become stalled or cease to make progress toward a solution due to accumulating running errors. The running errors may occur due to inaccuracies with respect to how some numerical values may be represented in a processing device. A linear solver using the exact arithmetic approach may represent numerical values more accurately than a linear solver using the double arithmetic approach, and therefore, is less subject to problems regarding the accumulation of running errors. However, users may be unwilling or unable to wait an amount of time until the linear solver using the exact arithmetic approach computes a solution.